package com.unlp.javaclickers.docente.vistas;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.Transaction;

import com.googlecode.genericdao.search.Search;
import com.unlp.javaclickers.docente.modelo.dao.impl.PreguntaDAOImpl;
import com.unlp.javaclickers.helper.HibernateUtil;
import com.unlp.javaclickers.modelo.Pregunta;

public class CrearPreguntaProfesor {

	private JFrame frame;
	private JFrame MainPregunta;
	private JTextArea textPregunta;
	private boolean editar;
	private DefaultListModel<Pregunta> modeloPreguntas;
	private Font fuente = new Font("Teen", Font.BOLD, 16);
	private JTextField textNombre;
	private static Logger LOGGER = Logger
			.getLogger(CrearPreguntaProfesor.class);
	private PreguntaDAOImpl p = new PreguntaDAOImpl(
			HibernateUtil.getSessionFactory());
	private Pregunta pregunta;

	public CrearPreguntaProfesor(boolean b) {
		this.pregunta = new Pregunta();
		editar = b;
		initialize();
	}

	public CrearPreguntaProfesor(boolean b, Pregunta pregunta) {
		this.pregunta = pregunta;
		this.editar = b;
		this.initialize();
	}

	private void initialize() {
		LOGGER.info("Init GUI CrearPreguntaProfesor");
		frame = new JFrame("JavaClickers Docente - Crear pregunta");
		frame.getContentPane().setBackground(Color.WHITE);
		frame.setBounds(100, 100, 544, 525);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(
				new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
		frame.setFont(fuente);

		JPanel panel = new JPanel();
		panel.setBackground(Color.WHITE);
		frame.getContentPane().add(panel);
		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

		JLabel lblNewLabel = new JLabel("");
		lblNewLabel.setIcon(new ImageIcon(getClass().getResource("logo.PNG")));
		panel.add(lblNewLabel);

		JPanel panel_1 = new JPanel();
		panel_1.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_1);
		panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

		JPanel panel_2 = new JPanel();
		panel_2.setBackground(Color.WHITE);
		panel_1.add(panel_2);
		Pregunta pregunta = this.pregunta;

		JLabel lblNewLabel_1 = new JLabel("Nombre pregunta");
		panel_2.add(lblNewLabel_1);
		lblNewLabel_1.setFont(fuente);

		textNombre = new JTextField();
		if (editar) {
			textNombre.setText(pregunta.getNombre());
		}
		panel_2.add(textNombre);
		textNombre.setFont(new Font("Teen", Font.BOLD, 16));
		textNombre.setColumns(10);

		JPanel panel_3 = new JPanel();
		panel_3.setBackground(Color.WHITE);
		panel_1.add(panel_3);

		JLabel lblEnunciado = new JLabel("Enunciado");
		lblEnunciado.setFont(new Font("Teen", Font.BOLD, 16));
		panel_3.add(lblEnunciado);

		textPregunta = new JTextArea();
		textPregunta.setText(pregunta.getEnunciado());
		panel_3.add(textPregunta);
		textPregunta.setBackground(Color.LIGHT_GRAY);
		textPregunta.setRows(5);
		textPregunta.setColumns(20);

		JPanel panel_6 = new JPanel();
		panel_6.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_6);

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				LOGGER.info("Cancelar pressed");
				if (!editar) {
					Transaction t = HibernateUtil.getSessionFactory()
							.getCurrentSession().beginTransaction();
					p.remove(CrearPreguntaProfesor.this.pregunta);
					t.commit();
				}
				getMainPregunta().setVisible(true);
				getFrame().setVisible(false);
			}
		});
		btnCancelar.setFont(fuente);
		panel_6.add(btnCancelar);

		JButton btnGuardar = new JButton("Guardar");
		btnGuardar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				LOGGER.info("Guardar pressed");
				if (!StringUtils.isEmpty(textPregunta.getText())
						&& !StringUtils.isEmpty(textNombre.getText())) {

					Search search = new Search();
					search.addFilterEqual("nombre", textNombre.getText());
					Transaction t2 = HibernateUtil.getSessionFactory()
							.getCurrentSession().beginTransaction();
					Pregunta preguntaUnica = p.searchUnique(search);
					t2.commit();

					if (preguntaUnica == null || editar) {
						CrearPreguntaProfesor.this.pregunta
								.setNombre(textNombre.getText());
						CrearPreguntaProfesor.this.pregunta
								.setEnunciado(textPregunta.getText());
						if(!editar){
							modeloPreguntas.addElement(CrearPreguntaProfesor.this.pregunta);
						}
						Transaction t = HibernateUtil.getSessionFactory()
								.getCurrentSession().beginTransaction();
						p.save(CrearPreguntaProfesor.this.pregunta);
						t.commit();
						getMainPregunta().setVisible(true);
						getFrame().setVisible(false);
					} else {
						JOptionPane.showMessageDialog(frame,
								"El nombre de la pregunta ya existe");
					}
				} else {
					JOptionPane.showMessageDialog(frame,
							"Complete los campos por favor");
				}
			}
		});
		btnGuardar.setFont(fuente);
		panel_6.add(btnGuardar);
	}

	public JFrame getFrame() {
		return frame;
	}

	public void setFrame(JFrame frame) {
		this.frame = frame;
	}

	public JFrame getMainPregunta() {
		return MainPregunta;
	}

	public void setMainPregunta(JFrame mainPregunta) {
		MainPregunta = mainPregunta;
	}

	public DefaultListModel<Pregunta> getModeloPreguntas() {
		return modeloPreguntas;
	}

	public void setModeloPreguntas(DefaultListModel<Pregunta> modeloPreguntas) {
		this.modeloPreguntas = modeloPreguntas;
	}

}
